#ifndef _LIB_H
#define _LIB_H

#include "lib.h"
#include "key.h"
#include "oled.h"
#include "stm32f10x.h"
#include <string.h>

#define BUFFSIZE 10

#define KEY_1 KEY_S1
#define KEY_2 KEY_S2
#define KEY_3 KEY_S3
#define KEY_4 KEY_S5
#define KEY_5 KEY_S6
#define KEY_6 KEY_S7
#define KEY_7 KEY_S9
#define KEY_8 KEY_S10
#define KEY_9 KEY_S11
#define KEY_0 KEY_S14

#define KEY_ENTER KEY_S16
#define KEY_BACKSPACE KEY_S4
#define KEY_ESC KEY_S15

#define KEY_ADD KEY_S8
#define KEY_DEL KEY_S12

#define CH_NONE 0

#define CH_ADD 17
#define CH_DEL 18
#define CH_ESC 27
#define CH_BACKSPACE 8

// 精确延迟，单位：0.1ms
// period：延迟周期数 <= 65535
void delay(unsigned int period);

// 开始计时并检测按键是否弹起，弹起则返回1，计时器结束返回0；
// ms: 计时时间，单位毫秒，最大为6553.5ms
// 不推荐用于循环计时，此函数每次开启计时器都会进行初始化，因为初始化开销较大，用于循环计时会导致误差增大
char TimedCheckKeyUp(unsigned int ms);

// 键代码转ASCII字符
// KeyCode：键代码
// 返回：对应ASCII字符,如果找不到则返回NONE
unsigned char KeyToChar(unsigned char KeyCode);


// 阻塞当前进程以获取一个字符
// 返回对应字符,未定义按键返回NONE
char getch();


// 从键盘输入并显示字符到屏幕，输入回车或达到限制长度时结束输入
// x；显示横坐标
// y：显示纵坐标
// str：字符串缓冲区
// 返回：输入回车结束返回0，溢出返回1，ESC返回2
char ShowAndGets(unsigned char x, unsigned char y, char* str);


#endif